Soft Tone Generator 1

By Steve Horne, 3 March 1999

This generator is a simple synthesizer, aimed at producing 'soft' instrument sounds, similar to wind instruments. Its key feature is that the amplitude never makes sudden jumps - even when a new note is played - but always follows a natural decay curve.

The output waveform can be distorted using a fractal algorithm similar to that used in my Fractal Effect machine. The key difference is that the distortion is applied to the raw waveform before the amplitude scaling is done. Thus the distortion remains the same whatever amplitude a note is played at. It is therefore more of a waveform reshaping than a true distortion.

Version Record

30 March 1999
Original version was built on the assumption that middle C is 440 Hz, which is wrong. 440 Hz is in fact Middle A.

Furthermore, I had not realised that Buzz separates the note numbers into an octave and semitone, stored in separate nibbles. I had assumed a MIDI-like linear simitone sequence.

This version fixes both of these errors.

3 March 1999
Initial Release

Global Parameters

Waveform
This selects one of the following waveforms... The precise shape of each of these is less important than its sound, so I won't bother with any graphics.
Attack
The rate at which the amplitude increases to the target amplitude when a note is on, specified as a half life in milliseconds.

Note - if the target amplitude is decreased while a note is playing, the note amplitude will decay to the new amplitude but the decay will occur at the 'attack' rate.

Decay
The rate at which the amplitude decays to zero when a note is off, specified as a half life in milliseconds.

Because all notes are sustained indefinitely, the note off command (the '1' key) will frequently be needed.

Effect
This is a coninuous value, which (once scaled) ranges from 0.0 to 9.0.

If this parameter is set to 1.0, the output will follow the input exactly.

If this parameter is set below 1.0, the function tends to 'fatten' input waveforms - triangles become sine waves (or square waves if Depth is high enough).

If this parameter is set to a high value, the function becomes chaotic. At 9.0 (with sufficiently high Depth), the output becomes white noise.

Depth
This parameter is the number of times that the distortion is applied.

If Depth is zero, the input is not changed.

If Depth has a low value, the algorithm reshapes the waveforms.

As Depth is increased (with a sufficiently high Effect value), more high harmonics appear until the signal eventually becomes white noise.

The fractal depth is limited to 10 (rather than the 32 supported by the fractal effect) because of the possibility of multiple tracks being handled at once.

Track Parameters

Note
Triggers notes.

If a new note is started while the previous note is still playing, the pitch changes immediately. This can sound similar to a wind instrument changing notes without stopping between - an effect such as Geonik's 'expression 2' should be used to make it more realistic.

Volume
This provides a target amplitude for the note being played. It is effectively the sustain level of the note. It can be changed at any time, and the note will smoothly follow the target amplitude.
This is my first generator, and I have treated it as a learning exercise rather than a serious project. There is considerable room for optimisation if there is any demand. However, as I mentioned for the Fractal Effect machine, the fractal algorithm I have used is inherently slow.

If you have any comments, please e-mail them to steve@lurking.demon.co.uk.